import { isVip } from '@/lib/auth/auth-utils';
import { VideoService } from '@/lib/video/video-service';
import { generateTypeMetadata } from '@/lib/utils/metadata';

import Error from '@/app/components/common/error';
import Videos from '@/app/components/video-list/videos';
import VipOnlyTip from '@/app/components/vip/vip-only-tip';
import EnhancedFilter from '@/app/components/filter/enhanced-filter';
import VideosSkeleton from '@/app/components/video-list/videos-skeleton';
import type { Metadata } from 'next';
import { Suspense } from 'react';

interface TypePageProps {
  params: Promise<{
    id: string;
  }>;
  searchParams: Promise<{
    page?: string;
    year?: string | string[];
    area?: string | string[];
    type?: string | string[];
    sort?: string;
    yearLessThan?: string;
    yearGreaterThan?: string;
  }>;
}

// 生成动态元数据
export async function generateMetadata(
  props: TypePageProps
): Promise<Metadata> {
  // 解构并获取参数
  const params = await props.params;
  const typeId = Number(params.id);

  try {
    // 直接复用TypePage中的代码获取分类数据
    const currentType = await VideoService.getTypeById(typeId);
    
    // 如果找不到分类，返回默认元数据
    if (!currentType) {
      return {
        title: '分类页面 - YZZY影视资源',
        description: 'YZZY影视资源网提供最新电影、电视剧、综艺、动漫等优质资源，内容丰富，画质清晰。',
      };
    }
    
    // 使用统一的元数据生成函数
    return generateTypeMetadata(currentType.name);
  } catch (error) {
    console.error('Failed to generate metadata:', error);
    return {
      title: '分类页面 - YZZY影视资源',
      description: 'YZZY影视资源网提供最新电影、电视剧、综艺、动漫等优质资源，内容丰富，画质清晰。',
    };
  }
}

export default async function TypePage(props: TypePageProps) {
  const params = await props.params;
  const searchParams = await props.searchParams;
  const page = Number(searchParams?.page) || 1;
  const typeId = Number(params.id);
  
  // 处理筛选参数
  const years = Array.isArray(searchParams.year) 
    ? searchParams.year 
    : searchParams.year ? [searchParams.year] : [];
    
  const areas = Array.isArray(searchParams.area) 
    ? searchParams.area 
    : searchParams.area ? [searchParams.area] : [];
    
  // 处理类型筛选参数
  const types = Array.isArray(searchParams.type)
    ? searchParams.type.map(id => Number(id))
    : searchParams.type ? [Number(searchParams.type)] : [];
    
  const sortBy = searchParams.sort || 'newest';

  // 处理yearLessThan参数
  const yearLessThan = searchParams.yearLessThan;
  
  // 处理yearGreaterThan参数
  const yearGreaterThan = searchParams.yearGreaterThan;

  // 从cookie中获取VIP状态 - 这里需要保留，因为后面的UI逻辑需要判断
  const is_vip = await isVip();

  try {
    // 获取分类信息
    const currentType = await VideoService.getTypeById(typeId);
    
    // 获取所有分类用于筛选器
    const allTypes = await VideoService.getAllTypes();
    
    // 获取年份列表和地区列表
    const [yearsList, areasList] = await Promise.all([
      VideoService.getYearsList(),
      VideoService.getAreasList()
    ]);
    
    // 确定实际使用的类型ID列表
    let actualTypeIds = [...types];
    
    // 如果没有指定type参数，但当前类型是顶级类型，则默认包含所有子类型
    if (types.length === 0 && currentType && !currentType.parentId) {
      const childTypes = allTypes.filter(type => type.parentId === typeId);
      if (childTypes.length > 0) {
        // 只使用顶级分类，不添加子分类到筛选条件中，让API返回所有属于该顶级分类的视频
        actualTypeIds = [];
      }
    } else if (types.length > 0) {
      // 如果有指定type参数，使用指定的子类型作为筛选条件
      actualTypeIds = types;
    }
    
    // 获取筛选后的视频列表
    const { videos, total } = await VideoService.getVideosByType(
      typeId, 
      page, 
      24, 
      {
        years,
        areas,
        types: actualTypeIds,
        sort: sortBy as 'newest' | 'hot' | 'rating',
        yearLessThan,
        yearGreaterThan
      }
    );

    // 如果视频列表为空，检查是否是因为VIP原因
    if (videos.length === 0 && !is_vip) {
      // 判断是否是VIP专属内容
      if (!currentType) {
        return (
          <VipOnlyTip message="此分类为VIP专属内容，请升级VIP后观看" />
        );
      }
    }

    return (
      <div className="container mx-auto px-3 sm:px-6 md:px-8 lg:px-12 xl:px-20 2xl:px-24 py-3 pb-4 sm:pb-4 max-w-full overflow-x-hidden">
        {/* 筛选区域 */}
        {currentType && (
          <EnhancedFilter
            currentTypeId={typeId}
            allTypes={allTypes}
            years={yearsList}
            areas={areasList}
            selectedYears={years}
            selectedAreas={areas}
            selectedTypes={types}
            sortBy={sortBy}
          />
        )}
        
        {/* 视频列表区域 */}
        <Suspense fallback={<VideosSkeleton />}>
          <Videos 
            videos={videos} 
            page={page} 
            total={total} 
          />
        </Suspense>
      </div>
    );
  } catch (error) {
    console.error('Failed to fetch videos by type:', error);
    return <Error message="获取数据失败" />;
  }
} 